package blue.global.util;

import java.util.*;

/**
 * <p>栈</p>
 * 
 * @author zhengj
 * @since 2008-12-6 1.0
 */
public class Stack<T> implements Iterable<T>
{
	private LinkedList<T> link;

	/**
	 * 创建一个栈对象
	 */
	public Stack()
	{
		link = new LinkedList<T>();
	}

	/**
	 * 入栈
	 * 
	 * @param item 入栈元素
	 */
	public void push(T item)
	{
		link.offerLast(item);
	}

	/**
	 * 出栈
	 * 
	 * @return 出栈元素
	 */
	public T pop()
	{
		if (this.isEmpty())
			throw new EmptyStackException();
		return link.pollLast();
	}

	/**
	 * 取得栈顶元素
	 * 
	 * @return 栈顶元素
	 */
	public T peek()
	{
		if (this.isEmpty())
			throw new EmptyStackException();
		return link.peekLast();
	}

	/**
	 * 取得栈的大小
	 * 
	 * @return 栈的大小
	 */
	public int size()
	{
		return link.size();
	}

	/**
	 * 判断栈是否为空
	 * 
	 * @return 栈为空返回true，否则返回false
	 */
	public boolean isEmpty()
	{
		return link.isEmpty();
	}

	@Override
	public Iterator<T> iterator()
	{
		return link.iterator();
	}
}
